Vous pouvez retrouver cette fiche rcapitulative dans la fiche glossaire des listes sur Docstring, avec la possibilit de modifier et tester le code de cette fiche :

https://www.docstring.fr/glossaire/liste/

Les listes font parties des quatre grandes structures de donnes qu'il existe en Python en plus des sets, des tuples et des dictionnaires.

C'est un objet trs pratique, aussi bien pour les dveloppeurs dbutants que pour ceux plus expriments.

Tu te rendras vite compte que tu en auras besoin dans la majorit de tes scripts !

Une liste est simplement une structure de donnes muable et ordonne dans laquelle tu peux stocker n'importe quel type d'objet.

Chaque objet contenu dans une liste est appel un lment.

Pour crer une liste, tu dois placer ces lments entre des crochets et les sparer par une virgule.

On accde aux lments d'une liste grce leur indice, c'est--dire leur position dans la liste.

Enfin, et c'est vraiment le plus intressant, une liste est une squence de donnes ! Cela signifie que tu peux itrer sur cette squence, avec une boucle for par exemple !

a c'tait pour poser les bases, dcortiquons un peu tout a point par point.

Une liste est ordonne

C'est important que tu retiennes bien qu'une liste est ordonne car ce n'est pas le cas de toutes les structures de donnes en Python.

Dans tous les cas, cela signifie simplement que les lments de ta liste seront toujours dans l'ordre que tu auras dfini dans ton code.

Il n'y a pas d'histoire d'ordre alphabtique ou quoi que ce soit, c'est toi qui dcides !

# liste vide
villes = [] 
# liste avec trois items de type str
villes = ['Paris', 'Lille', 'Lyon']
print(villes)

N'importe quel type de donnes

Comme je te le disais, tu peux stocker vraiment n'importe quoi dans une liste ! Des nombres, des boolens, des chanes de caractres et pourquoi pas d'autres listes. Tout a au sein d'une seule et mme liste.

Alors c'est vrai que dans la pratique, on prfre souvent stocker des lments d'un mme type comme des prnoms, des noms de villes, ou des montants mais sache qu'il n'y a aucune limite.

# liste avec trois lments de type str
villes = ['Paris', 'Lille', 'Lyon']
# liste avec cinq lments de type int
prix = [3, 10, 25, 40, 100]
# liste avec plusieurs lments de types diffrents
liste_de_tout_et_rien = [5, 'Docstring', True, 9.5, 4, 'Python', ['autre liste'], False]
# liste qui contient un dictionnaire
adresse = [
    {
        'rue': 'rue du Serpent',
        'numero': 6,
        'ville': 'Lille'
    }
]

Les indices

Dans une liste chaque lment est accessible grce sa position.

On appelle cette position un indice (index en anglais).

On continue avec les villes :

villes = ['Paris', 'Lille', 'Lyon']
print(villes[0])  # 'Paris' 
print(villes[1])  # 'Lille'
print(villes[2])  # 'Lyon'

On reviendra un peu plus tard sur cette notion d'indice car on peut l'utiliser de plusieurs faons.

Pour rappel, le premier lment d'une liste se trouve toujours en position zro ! On aura donc toujours un dcalage de 1. Si vous souhaitez accder au 2e lment d'une liste, il faudra utiliser l'indice 1 et ainsi de suite.

Muable

Quand on parle d'objet muable, cela veut dire qu'un objet peut tre modifi mme aprs son assignation.

C'est--dire qu'on va pouvoir ajouter, modifier ou supprimer des lments la vole.

villes = ['Paris', 'Lile', 'Lyon']
# J'ai mal orthographi exprs un lment, on va modifier a :
villes[1] = 'Lille'
print(villes) # ['Paris', 'Lille', 'Lyon']
# Et si on ajoutait une ville ?
villes.append('Strasbourg')
print(villes) # ['Paris', 'Lille', 'Lyon', 'Strasbourg']
# J'ai jamais aim Paris... 
del villes[0]
print(villes) # ['Lille', 'Lyon', 'Strasbourg']

Itrable

Et oui, tu peux itrer sur une liste car c'est une squence de donnes au mme titre qu'une chane de caractres. a devient trs facile d'appliquer une logique tous les lments de ta liste !

villes = ['Lille', 'Lyon', 'Strasbourg']
for ville in villes:
    print(ville.upper())

Quand doit-on utiliser une liste ?

C'est une question que tu es en droit de te poser au vu des nombreuses possibilits offertes par Python.

Je vais te donner une astuce personnelle que j'utilise chaque fois que j'ai besoin de crer une structure de donnes :

Avec ce raisonnement, tu devrais t'en sortir dans la majorit des cas.

De toute faon, sache que c'est assez simple de passer d'une structure l'autre grce aux fonctions de conversion de type de Python.

Par exemple il est facile de retirer tous les doublons d'une liste en passant par un set :

villes = ['Paris', 'Lille', 'Lyon', 'Paris', 'Strasbourg']
ville = list(set(villes))
print(ville) # ['Lyon', 'Lille', 'Strasbourg', 'Paris']

J'utilise la fonction set() pour convertir ma liste villes d'origine en set, ce qui va avoir pour effet de retirer tous les doublons car les set ne les acceptent pas. Ensuite je n'ai plus qu' reconvertir ce set en liste pour la rcuprer sans les doublons.

Comme la liste a t convertie en set, il se peut que les lments ne soient plus dans le mme ordre que celui d'origine.

Ce que tu dois absolument savoir faire avec

Je vais commencer par les choses les plus videntes puis on ira vers des oprations plus complexes 

Crer une liste

Il existe deux mthodes pour crer une liste vide :

Avec les crochets

liste_vide = []

Avec le constructeur

liste_vide = list()

Gnralement, on prfre utiliser les crochets pour crer une liste.

C'est plus lisible et c'est un petit peu plus rapide ! Bon, on parle de millimes de secondes de diffrence, a n'a aucun impact mais a reste un argument. Utilise seulement le constructeur list() quand tu as besoin de convertir un autre objet en liste :

site = 'Docstring'
site_to_liste = list(site)
print(site_to_liste)  # ['D', 'o', 'c', 's', 't', 'r', 'i', 'n', 'g']

Accder des lments

liste[indice]  Retourne l'lment associ l'indice

Pour accder un lment dans une liste, on utilise la notation entre crochets [ ] et l'indice de l'lment.

villes = ['Paris', 'Lille', 'Lyon']
print(villes[1])   # 'Lille'
print(villes[-1])  # 'Lyon'
print(villes[3])   # IndexOutOfRange Error

Tu peux galement rcuprer des lments en partant de la fin avec les indices -1, -2 et ainsi de suite.

liste[dbut:fin:pas]  Retourne le ou les lments en fonction de l'intervalle prcis

Dans ce cas, on doit utiliser le dcoupage par tranche *ou slicing* : [dbut:fin:pas]

Cela te permet de crer un intervalle de slection dans ta liste et de prciser ventuellement un pas si tu souhaites rcuprer un lment sur deux par exemple.

Jouons avec a :

villes = ['Paris', 'Lille', 'Lyon']
print(villes[0:2])    # ['Paris', 'Lille']
print(villes[0::2])   # ['Paris', 'Lyon']
print(villes[0:])     # ['Paris', 'Lille', 'Lyon']
print(villes[:])      # ['Paris', 'Lille', 'Lyon']
print(villes[:-1])    # ['Paris', 'Lille']
print(villes[::-1])   # ['Lyon', 'Lille', 'Paris'] 

Tu peux utiliser cette technique pour slectionner des items videmment mais aussi pour copier proprement une liste ou encore pour inverser l'ordre des lments l'intrieur d'une liste, c'est trs pratique !

Fais attention quand tu utilises le slicing car l'indice de dbut est inclusif tandis que l'indice de fin est exclusif.

Ajouter des lments

Pour ajouter des lments dans une liste, Python dispose de plusieurs mthodes :

.append(item)  Ajoute un lment la fin de ta liste

C'est la mthode la plus connue et celle qui est le plus souvent utilise :

villes = ['Paris', 'Lille', 'Lyon']
villes.append('Strasbourg')
print(villes)

.insert(index, item)  Ajoute un item la position indique en paramtre

Beaucoup moins utilise mais qui peut s'avrer utile.

villes = ['Paris', 'Lille', 'Lyon']
villes.insert(1, 'Strasbourg')
print(villes)  # ['Paris', 'Strasbourg', 'Lille', 'Lyon']

Tu peux l aussi utiliser un indice ngatif, pour insrer un lment la fin de la liste (quivalent d'un append) ou en avant-dernire position.

villes = ['Paris', 'Lille', 'Lyon']
villes.insert(-1, 'Strasbourg')
villes.insert(-2, 'Nice')
print(villes)  # ['Paris', 'Lille', 'Nice', 'Strasbourg', 'Lyon']

.extend(iterable)  Ajouter tous les items de la collection dans ta liste

villes = ['Paris', 'Lille', 'Lyon']
autres_villes = ['Strasbourg', 'Marseille']
villes.extend(autres_villes)
print(villes)  # ['Paris', 'Lille', 'Lyon', 'Strasbourg', 'Marseille']

Modifier des lments

Une liste est un objet muable, ce qui signifie qu'on peut la modifier sans problme !

liste[indice] = value  Assigne une nouvelle valeur

villes = ['Paris', 'Lille', 'Lyon']
villes[1] = 'Strasbourg'
print(villes)  # ['Paris', 'Strasbourg', 'Lyon']

liste[dbut:fin] = [value1, value2, ...]  Assigne des nouvelles valeur sur l'intervalle donn

villes = ['Paris', 'Lille', 'Lyon']
villes[1:] = ['Strasbourg', 'Rennes']
print(villes)  # ['Paris', 'Strasbourg', 'Rennes']

Supprimer des lments

Il existe trois faons de supprimer un lment :

del liste[indice]  Supprime un ou plusieurs lments d'une liste. Peut galement tre utilis pour dtruire compltement une liste.

villes = ['Paris', 'Lille', 'Lyon']
del villes[0]
print(villes)  # ['Lille', 'Lyon']
villes = ['Paris', 'Lille', 'Lyon']
del villes
print(villes)  # NameError

liste.pop(index)  Retire un item de la liste. Si tu ne prcises pas d'index, cela retire automatiquement le dernier lment. Et surtout, cela permet de rcuprer cet lment.

villes = ['Paris', 'Lille', 'Lyon']
ma_ville = villes.pop(1)
print(villes)    # [Paris', 'Lyon']
print(ma_ville)  # Lille

liste.remove(item)  Supprime un lment de la liste.

villes = ['Paris', 'Lille', 'Lyon']
villes.remove('Paris')
print(villes)  # ['Lille', 'Lyon']
villes = ['Paris', 'Lille', 'Lyon']
villes.remove('Marseille')
print(villes)  # ValueError